package easy;

/**
 * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 *
 * 示例 1:
 *
 * 输入: 121
 * 输出: true
 * 示例 2:
 *
 * 输入: -121
 * 输出: false
 * 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
 * 示例 3:
 *
 * 输入: 10
 * 输出: false
 * 解释: 从右向左读, 为 01 。因此它不是一个回文数。
 * 进阶:
 *
 * 你能不将整数转为字符串来解决这个问题吗？
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/palindrome-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class DAY03 {

    public static void main(String[] args) {
        int t1 = 123321;
        int t2 = 1234567;
        System.out.println(isPalindrome3(t1));
        System.out.println(isPalindrome3(t2));

    }

    public static boolean isPalindrome3(int data) {
        long ret = 0;
        int temp = data;
        if (temp < 0) return false;
        else if (temp < 10) return true;
        else {
            while (temp != 0) {
                ret = ret * 10 + temp % 10;
                temp /= 10;
            }
        }
        return ret == data;
    }


    /**
     * 与整数翻转一样的思路，翻转以后在进行一次相等比较
     * 执行用时 :10 ms, 在所有 Java 提交中击败了69.97%的用户
     * 内存消耗 :39.3 MB, 在所有 Java 提交中击败了5.14%的用户
     */
    public static boolean isPalindrome(int x) {
        if(x<0) return false;
        long y = 0;
        int x1 = x;
        while(x1 > 0) {
            y = y*10 + x1%10;
            x1 /= 10;
        }
        return (int) y == x;
    }

    /**
     * 使用转字符串的方式进行比较，题目说明不能用此方法,此处写出来,感觉项目中应该用此方法比较多哈
     * 执行用时 :12 ms, 在所有 Java 提交中击败了37.21%的用户
     * 内存消耗 :39.8 MB, 在所有 Java 提交中击败了5.14%的用户
     */
    public static boolean isPalindrome2(int x) {
        String string = Integer.toString(x);
        if (string.equals(new StringBuffer(string).reverse().toString())) {
            return true;
        }
        return false;
    }


}
